/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo.DAL;

/**
 *
 * @author Jose Leonardo
 */
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import Modelo.Guardia;
import java.text.SimpleDateFormat;

import org.json.*;

public class Guardia_DAO {

    public boolean insertarGuardia(Guardia g) {
        ConexionBD conexion = new ConexionBD();
        //boolean status = false;
        if (conexion.session == null) {
            return false;
        }
        Statement stt = null;
        try {
            stt = conexion.session.createStatement();

            String query = "update guardia set id_guardia = '" + g.getGuardia() + "', "
                    + "id_grupo = '" + g.getGrupo() + "', "
                    + "sede = '" + g.getSede() + "', "
                    + "fecha_guardia =  '" + g.getFechaGuardia() + "'";
            System.out.println(query);
            stt.execute(query);
            return true;
        } catch (SQLException se) {
            System.out.println("Error al insertar una guardia.\n"
                    + se.getMessage());
            return false;
        } finally {
            if (conexion.session != null) {
                conexion.cerrarConexion();
            }
        }
    }

    //Metodo usado en el CU Registrar Asistencia
    public Long obtenerIdGuardia(String fecha, String ci) {
        ConexionBD conexion = new ConexionBD();
        if (conexion.session == null) {
            return null;
        }
        Statement stt = null;
        Long idguardia = null;
        try {
            stt = conexion.session.createStatement();
            String query = "select id_guardia from guardia where "
                    + "fecha_guardia = '" + fecha + "' and (id_grupo,sede) in "
                    + "(select pgr.id_grupo, pgr.sede from pertenece_grupo pgr where "
                    + "pgr.ci = '" + ci + "')";
            ResultSet rs = stt.executeQuery(query);
            if (rs.next()) {
                //idguardia = Long.parseLong(rs.getString(1));
                idguardia = rs.getLong("id_guardia");
                System.out.println("\n\n\nId de la Guardia:" + idguardia.toString());
            }
            return idguardia;
        } catch (SQLException se) {
            System.out.println("Error al listar las guardias.\n"
                    + se.getMessage());
            return null;
        } finally {
            if (conexion.session != null) {
                conexion.cerrarConexion();
            }
        }

    }

    public JSONObject consultarGuardiaSede(String sede) {
        ConexionBD conex = new ConexionBD();
        JSONObject guardias = new JSONObject();
        try {
            Statement st = conex.session.createStatement();
            String sql = "SELECT id_grupo, fecha_guardia FROM guardia "
                    + "where nombre_sede = '" + sede + "'";
            ResultSet rs = st.executeQuery(sql);
            int i = 0;
            while (rs.next()) {
                JSONObject guardia = new JSONObject();
                guardia.put("id_grupo", rs.getString(1));
                guardia.put("fecha_guardia", rs.getString(2));
                guardias.put("" + i++, guardia);
            }
        } catch (Exception e) {
        }
        return guardias;
    }

    public JSONObject listarCIPersonalReemplazo(Long idGuardia) {

        ConexionBD conexion = new ConexionBD();
        if (conexion.session == null) {
            return null;
        }
        Statement stt = null;
        //LinkedList list = new LinkedList();
        JSONObject listCi = new JSONObject();
        try {
            stt = conexion.session.createStatement();

            String query = "select cu.ci, cu.nombre, cu.apellido"
                    + "from personal_dsi pd, pertenece_grupo pg, guardia, comunidad_universitaria cu"
                    + "where pd.ci = cu.ci and pg.ci = pd.ci"
                    + "and pg.id_grupo not in"
                    + "(select id_grupo from guardia"
                    + "where id_guardia =" + idGuardia + ")"
                    + "and pg.sede="
                    + "(select sede from guardia"
                    + "where id_guardia = idGuardia)"
                    + "and pg.id_grupo not in"
                    + "(select id_grupo from guardia"
                    + "where id_guardia ="
                    + "(select id_guardia from guardia"
                    + "where fecha_guardia ="
                    + "(select fecha_guardia from guardia"
                    + "where id_guardia =" + idGuardia + ")"
                    + "and id_guardia not in(" + idGuardia + ")))";

            ResultSet rs = stt.executeQuery(query);
            int i = 0;
            while (rs.next()) {
                //Asistencia ast = new Asistencia();
                JSONObject ciPers = new JSONObject();

                //String horaLlegS = rs.getString("hora_llegada");
                //java.util.Date horaLlegD = java.sql.Date.valueOf(horaLlegS);

                ciPers.put("ci", rs.getString(1));
                ciPers.put("nombre", rs.getString(2));
                ciPers.put("apellido", rs.getString(3));
                //System.out.println("CI: "+ci);

                listCi.put("" + i++, ciPers);
            }
        } catch (SQLException se) {
            System.out.println("Error al listar las cedulas de los empleados.\n"
                    + se.getMessage());
        } catch (Exception e) {
            System.out.println("Error al listar las cedulas de los empleados.\n"
                    + e.getMessage());
        } finally {
            if (conexion.session != null) {
                conexion.cerrarConexion();
            }
        }

        //return list;
        return listCi;
    }

    public JSONObject consultarCambiosGuardia(String fechaDesde, String fechaHasta, String ci, String sede) {
        ConexionBD conex = new ConexionBD();
        JSONObject tiposObjeto = new JSONObject();

        try {
            Statement st = (Statement) conex.session.createStatement();
            String query = "SELECT s.ci,nombre_1,apellido_1,fecha_guardia,autorizado_por,ci_suplente FROM suplencia s,guardia g,comunidad_universitaria c where g.id_guardia = s.id_guardia and c.ci = s.ci ";

            if (ci != null && !ci.isEmpty()) {
                query += "and ci = '" + ci + "' ";
            }

            if (fechaDesde != null && !fechaDesde.isEmpty()) {
                query += "and fecha_guardia <= date '" + fechaDesde + "' ";
            }
            if (fechaHasta != null && !fechaHasta.isEmpty()) {
                query += "and fecha_guardia >= date '" + fechaHasta + "' ";
            }
            if (sede != null && !sede.isEmpty()) {
                query += "and sede = '" + sede + "' ";
            }

            System.out.println(query);

            ResultSet rs = st.executeQuery(query);
            int i = 0;
            while (rs.next()) {
                JSONObject tipoObjeto = new JSONObject();
                tipoObjeto.put("ci", rs.getString(1));
                tipoObjeto.put("nombre_1", rs.getString(2));
                tipoObjeto.put("apellido_1", rs.getString(3));
                tipoObjeto.put("fecha_guardia", rs.getString(4));
                tipoObjeto.put("autorizado_por", rs.getString(5));
                tipoObjeto.put("ci_reemplazo", rs.getString(6));
                tiposObjeto.put("" + i++, tipoObjeto);
            }
            System.out.println(tiposObjeto.length());
        } catch (Exception e) {
            System.out.print("me potee " + e.getMessage());
        }
        return tiposObjeto;
    }

    public static JSONObject consultarGuardiasPersonal(Guardia guardia, String limit, String offset, String order, String asc) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        JSONObject personal = new JSONObject();
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error consultando empleados de guardia");
            return null;
        }

        try {
            SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
            String fecha = (guardia.getFechaGuardia() == null ? null : df.format(guardia.getFechaGuardia()));

            String query = "SELECT cu.ci, cu.nombre_1, cu.apellido_1,  "
                    + "pg.id_grupo, pg.funcion, g.id_guardia, h.horainicio, h.horafin, "
                    + "a.hora_llegada, a.hora_salida, a.condicion ";
            String from = "from ((((guardia g join pertenece_grupo pg on (g.id_grupo= pg.id_grupo)) "
                    + "join (personal_dsi pdsi natural join comunidad_universitaria cu) on (pg.ci=pdsi.ci)) "
                    + "join horario h on (pdsi.id_horario=h.id_horario)) "
                    + "left outer join asistencia a on ((g.id_guardia=a.id_guardia) and (pdsi.ci=a.ci))) ";
            String params = "WHERE  (1=1) ";
            if (guardia.getSede() != null && !guardia.getSede().equals("")) {
                params += "and (g.sede = '" + guardia.getSede() + "') ";
            }
            if (fecha != null && !fecha.equals("")) {
                params += "and (g.fecha_guardia = '" + fecha + "') ";
            }

            String format = "";
            if (order != null && !order.equals("")) {
                format += " order by " + order;
                if (asc != null && !asc.equals("") && asc.equals("false")) {
                    format += " desc";
                } else {
                    format += " asc";
                }
            }

            if (limit != null && !limit.equals("")) {
                format += " limit " + limit;
            }
            if (offset != null && !offset.equals("")) {
                format += " offset " + offset;
            }

            System.out.println(query + from + params + format);
            rs = s.executeQuery(query + from + params + format);
            JSONArray ja = new JSONArray();
            int i = 0;
            while (rs.next()) {
                JSONObject persona = new JSONObject();
                persona.put("ci", rs.getString(1));
                persona.put("nombre1", rs.getString(2));
                persona.put("apellido1", rs.getString(3));
                persona.put("grupo", rs.getString(4));
                persona.put("funcion", rs.getString(5));
                persona.put("guardia", rs.getString(6));
                persona.put("inicio", rs.getString(7));
                persona.put("fin", rs.getString(8));
                persona.put("llegada", rs.getString(9));
                persona.put("salida", rs.getString(10));
                persona.put("condicion", rs.getString(11));
                ja.put(i++, persona);
            }
            personal.put("personal", ja);

            query = "select count(*) " + from + params;
            System.out.println(query);
            rs = s.executeQuery(query);
            if (rs.next()) {
                personal.put("tam", rs.getString(1));
            }
            return personal;
        } catch (SQLException se) {
            System.out.println("Error consultando empleados de guardia\n" + se.getMessage());
            return personal;
        } catch (Exception e) {
            System.out.println("Error obteniendo data de empleados de guardia\n" + e.getMessage());
            return personal;
        }
    }
}
